#include "fondbizarre.h"

void init_fondbizarre() {


	t_entite E[NB_MAX];   // un tableau de NB_MAX t_entite
	BITMAP *page;         // le buffer image
	BITMAP*fond;          // pour l'image en fond
//	init_all_entite(E);

}

/*******************************************************************************
initialiser l'entité
 *******************************************************************************/

/*
#define TXMAX     90
#define TYMAX     90
t_entite init_entite() {

	t_entite e;
	int r ;
	int g ;
	int b;

	// le type
	e.type=rand()%FIN;            // RECT=0, CERCLE=1, TRIANG=2 FIN=3
	// taille
	e.tx = 10+rand()%TXMAX;
	if (e.type==CERCLE)// si cercle, dans un carré avec ty et tx comme rayon
		e.ty = e.tx;
	else
		e.ty = 10+rand()%TYMAX;  // sinon une surface type rect
	//position
	e.x=rand()%(SCREEN_W-TXMAX);
	e.y=rand()%(SCREEN_H-TYMAX);
	// déplacement
	e.px= (rand()%11)-5; // valeur entre -5 et 5 pour déplacement horizontal
	e.py= (rand()%11)-5; // idem pour déplacement vertical
	// création couleur avec trois valeurs aléatoires:
	r=rand()%256;
	g=rand()%256;
	b=rand()%256;
	e.color=makecol(r,g,b);
	return e;
}
/*******************************************************************************
 *******************************************************************************/

/*
void init_all_entite(t_entite tab[])
{
	int i;
	for (i=0; i<NB_MAX; i++)
		tab[i]=init_entite();
}
/*******************************************************************************
passage par référence :
la fonction bouge prend comme paramètre un pointeur sur entité, ceci afin de
passer l'adresse mémoire de l'entité à bouger et de pouvoir modifier sa position
(on écrit à l'adresse mémoir de l'entité)
 *******************************************************************************/
void bouge_entite(t_entite *e)
{
	// base du mouvement ajouter le pas d'avancement à la position courante
	e->x+=e->px;

	// contrôl du bord, si sortie gauche entrée à droite
	if (e->x < -e->tx )
		e->x= SCREEN_W;
	// si sortie droite entrée à gauche
	if (e->x > SCREEN_W )
		e->x= -e->tx+1;

	e->y+=e->py;
	// si sortie en haut entrée en bas
	if (e->y < -e->ty )
		e->y= SCREEN_H;
	// si sortie droite entrée à gauche
	if (e->y > SCREEN_H )
		e->y= -e->ty+1;
}
/*******************************************************************************
autre possibilité sans passage par référence prendre en paramètre l'entité à
modifier, retourner l'entité modifiée afin de la récupérer dans le contexte
d'appel
 *******************************************************************************/
t_entite bouge2_entite(t_entite e)
{
	// base du mouvement ajouter le pas d'avancement à la position courante
	e.x+=e.px;

	// contrôl du bord, si sortie gauche entrée à droite
	if (e.x < -e.tx )
		e.x= SCREEN_W;
	// si sortie droite entrée à gauche
	if (e.x > SCREEN_W )
		e.x= -e.tx+1;

	e.y+=e.py;
	// si sortie en haut entrée en bas
	if (e.y < -e.ty )
		e.y= SCREEN_H;
	// si sortie droite entrée à gauche
	if (e.y > SCREEN_H )
		e.y = -e.ty+1;

	// attention ne pas oublier de retourner la structure modifiée
	return e;
}
/*******************************************************************************
 *******************************************************************************/
void bouge_all_entite(t_entite tab[])
{
	int i;
	for (i=0; i<NB_MAX; i++)
		// passage de l'adresse mémoire de l'entité (passage par référence)
		//bouge_entite(&tab[i]);
		// ou si pas de passage par référence
		tab[i]=bouge2_entite(tab[i]);
}
/*******************************************************************************
pour la fonction d'affichage un passage par référence n'est pas utile
parce qu'il n'y a pas de modification de l'entité.
En revanche la bitmap doit être modifiée dans le contexte d'appelc'est pourquoi
passer son adresse est nécessaire
 *******************************************************************************/
void affiche_entite(BITMAP *bmp, t_entite e)
{
	int cx,cy;

	switch(e.type){
	case RECT :
		rectfill( bmp,	e.x, e.y, e.x+e.tx, e.y+e.ty, e.color);
		break;

	case TRIANG :
		// trois points : (x,y+ty)  (x+tx, y+ty) (x+tx/2, y)
		triangle( bmp,	e.x, e.y + e.ty,
				e.x + e.tx, e.y + e.ty,
				e.x + e.tx/2 ,e.y,
				e.color);
		break;

	case CERCLE :
		cx = e.x + e.tx/2; //tx/2 comme rayon
		cy = e.y + e.tx/2;
		circlefill( bmp, cx, cy, e.tx/2, e.color);
		break;
	}
}
/*******************************************************************************
 *******************************************************************************/
void affiche_all_entite(BITMAP*bmp, t_entite tab[])
{
	int i;
	for (i=0; i<NB_MAX ; i++)
		affiche_entite(bmp,tab[i]);

}
/*******************************************************************************
 *******************************************************************************/
